package com.itcast.googleplay.utils;

import com.itcast.googleplay.application.MyApplication;

import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Message;
import android.view.View;

public class UIUtils {
	/**
	 * @return	返回上下文环境
	 */
	public static Context getContext(){
		return MyApplication.getContext();
	}
	
	public static Handler getHandler(){
		return MyApplication.getHandler();
	}
	
	public static Thread getMainThread(){
		return MyApplication.getMainThread();
	}
	
	public static int getMainThreadId(){
		return MyApplication.getMainThreadId();
	}
	/**
	 * @return 获取res文件夹
	 */
	public static Resources getResources(){
		return getContext().getResources();
	}
	/**
	 * @param colorId	根据id获取色值
	 * @return		
	 */
	public static int getColor(int colorId){
		return getResources().getColor(colorId);
	}
	
	/**
	 * @param drawableId	根据id
	 * @return				获取图片
	 */
	public static Drawable getDrawable(int drawableId){
		return getResources().getDrawable(drawableId);
	}
	
	/**
	 * @param layoutId
	 * @return
	 */
	public static View inflate(int layoutId){
		return View.inflate(getContext(), layoutId, null);
	}
	
	//获取string中的字符串
	public static String getString(int stringId){
		return getResources().getString(stringId);
	}
	//适配中,dip ---->px 
	public static int dip2px(int dip){
		//1.获取手机的像素密度,px和dp的比例关系		1:0.75  1:1 1:1.5		
		float density = getResources().getDisplayMetrics().density;
		return (int)(density*dip+0.5f);
	}
	//px--->dip方法
	public static int px2dip(int px){
		//1.获取手机的像素密度,px和dp的比例关系		1.5		150px	100dp+0.5f = 100
		float density = getResources().getDisplayMetrics().density;
		return (int)(px/density+0.5f);
	}
	//保证代码运行在主线程中(开启子线程,到主线程中处理UI)
	public static void runInMainThread(Runnable runnable){
		//1.如果此runInMainThread中的runnable就是在主线程中
		if(getMainThreadId() == android.os.Process.myTid()){
			//在MyApplication中获取的id和你当前应用程序的id一致,说明是主线程,是主线程则直接运行runnable中过的run方法即可
			runnable.run();
		}else{
			//不是主线程,指定runnable中的run方法在主线程中运行
			getHandler().post(runnable);
			
			//1.创建Message对象,将runnable封装在message对象的obj中(handler发送过程),子线程
			//2.在handlerMessage方法中获取message中的obj对象,然后获取runnable,再去调用run方法(handler接受处理消息过程),主线程
		}
	}

	/**
	 * @param mTabTextColorResId	传递一个包含了选择器的文件,返回选择器的对象
	 * @return
	 */
	public static ColorStateList getColorStateList(int mTabTextColorResId) {
		return getResources().getColorStateList(mTabTextColorResId);
	}
	
	public static String[] getStringArray(int arrayId){
		return getResources().getStringArray(arrayId);
	}
}
